package ink.onei.user.service.impl;

import ink.onei.common.core.domain.entity.Seller;
import ink.onei.common.core.domain.entity.SysRole;
import ink.onei.common.utils.DateUtils;
import ink.onei.system.domain.SysUserRole;
import ink.onei.system.mapper.SysRoleMapper;
import ink.onei.system.mapper.SysUserRoleMapper;
import ink.onei.user.mapper.SellerMapper;
import ink.onei.user.service.ISellerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 商家Service业务层处理
 *
 * @author nekotako
 * @date 2024-01-27
 */
@Service
public class SellerServiceImpl implements ISellerService {
    @Autowired
    private SellerMapper sellerMapper;

    @Autowired
    private SysUserRoleMapper userRoleMapper;

    /**
     * 查询商家
     *
     * @param sellerId 商家主键
     * @return 商家
     */
    @Override
    public Seller getSellerById(Long sellerId) {
        return sellerMapper.selectSellerById(sellerId);
    }

    /**
     * 查询商家列表
     *
     * @param seller 商家
     * @return 商家
     */
    @Override
    public List<Seller> getSellerList(Seller seller) {
        return sellerMapper.selectSellerList(seller);
    }

    /**
     * 条件查询单个商家
     *
     * @param seller 商家条件
     * @return 商家
     */
    @Override
    public Seller getSellerDetail(Seller seller) {
        return sellerMapper.getSellerDetail(seller);
    }

    /**
     * 新增商家
     *
     * @param seller 商家
     * @return 结果
     */
    @Override
    public int insertSeller(Seller seller) {
        seller.setCreateTime(DateUtils.getNowDate());
        return sellerMapper.insertSeller(seller);
    }

    /**
     * 修改商家
     *
     * @param seller 商家
     * @return 结果
     */
    @Transactional
    @Override
    public int updateSeller(Seller seller) {
        return sellerMapper.updateSeller(seller);
    }

    /**
     * 批量删除商家
     *
     * @param sellerIds 需要删除的商家主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteSellerByIds(Long[] sellerIds) {
        return sellerMapper.deleteSellerByIds(sellerIds);
    }

    /**
     * 删除商家信息
     *
     * @param sellerId 商家主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteSellerById(Long sellerId) {
        return sellerMapper.deleteSellerById(sellerId);
    }

    /**
     * 登录用户，根据提供的卖家信息进行身份验证。
     *
     * @param username 用户名
     * @param password 密码
     * @return 如果登录成功，返回卖家的详细信息；如果登录失败，返回null
     */
    @Override
    public Seller login(String username, String password) {
        return getSellerDetail(new Seller(username, password));
    }

    /**
     * 注册方法
     *
     * @param username 用户名
     * @param password 密码
     * @return 如果登录成功，返回卖家的详细信息；如果登录失败，返回null
     */
    @Override
    public Integer register(String username, String password){
        Seller seller = new Seller(username, password);
        int i = insertSeller(seller);
        insertUserAuth(seller.getSellerId(), 3L);
        return i;
    }

    /**
     * 用户授权角色
     *
     * @param sellerId 用户ID
     * @param roleId 角色组
     */
    @Override
    public Integer insertUserAuth(Long sellerId, Long roleId){
       return userRoleMapper.insertUserRole(new SysUserRole(0L, sellerId, 0L, roleId));
    }

}
